背景:最近的项目中涉及到读写M1卡,之前完全没接触过一脸懵逼,却没意识到,生活中常用的公交卡、门禁卡、开水卡、会员卡等等大多数都是M1类的射频卡,如Mifare 1k S50系列。熟悉了相关知识后,发现原理如此简单,感谢开源也因此能做很多方便的事情了。记录一下,面对陌生的事物不要害怕,了解熟悉,探索乐趣。
基础知识
M1卡
M1卡结构

从上面可以看到,扇区0 块0
固化了厂家代码,32位16进制数,一般作为ID
使用。
每一个扇区的块3用于保存KEY A,存取控制,KEY B
,除了扇区0的块0之外的其他的块0~块2
都用于存储数据。KEY A
不可读、可写,KEY B
可读可写.
一般的门禁卡中,不存储任何数据,门禁系统只读取卡ID,学校里使用的开水卡,一般是离线使用,卡的余额或者使用次数是存储在卡中的,使用时进行读写。在武汉通中,存储了卡余额,储值、消费记录,具体的余额存储在服务器上。所以理论上可以模拟卡ID来模拟门禁卡,或者是读取修改水卡值来修改卡。
读写卡工具MIFARE Classic Tool, MifareClassicTool - GitHub
模拟卡工具NFC卡模拟